#!/usr/bin/env bash
# ══════════════════════════════════════════════════════════════════════════════
# FurryOS Gen2.1_v2 Master Build System - "The Developer Edition"
# ══════════════════════════════════════════════════════════════════════════════
# Integrated: Workspace Prep, Package Injection, Assets, Live Setup, QEMU
# 🐾 Feature: Ember-Night Developer Terminal (JetBrains Mono)
# ══════════════════════════════════════════════════════════════════════════════

BUILD_START_TIME=$(date +%s)
set -e

# --- Path Configuration ---
PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)"
PARENT_DIR="$(cd "$PROJECT_ROOT/.." && pwd)"
GENERATED="$PARENT_DIR/_generated"
BUILD_DIR="$PARENT_DIR/build"
ISO_DIR="$GENERATED/iso"
WORK_DIR="$GENERATED/work"
ISO_ROOT="$GENERATED/iso-root"
SQUASHFS_ROOT="$WORK_DIR/squashfs-root"
OUTPUT_DIR="$BUILD_DIR/output"

# Auto-log
LOG_FILE="build_$(date +%Y%m%d_%H%M%S).log"
exec > >(tee -a "$LOG_FILE") 2>&1

echo "╔════════════════════════════════════════╗"
echo "║   FurryOS Gen2.1_v2 Build System       ║"
echo "╚════════════════════════════════════════╝"

# ═══════════════════════════════════════════════════════════════════
# [Phase 0] Resource Calculation & Cleanup
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 0] Calculating system limits..."
if command -v free >/dev/null 2>&1; then
    AVAIL_GB=$(free --giga | awk '/^Mem:/ {print int($7)}')
    SQUASH_MEM=$((AVAIL_GB * 75 / 100))
    [ "$SQUASH_MEM" -lt 2 ] && SQUASH_MEM=2
    echo "📊 Capping RAM usage at ${SQUASH_MEM}G for safety."
else
    SQUASH_MEM="4"
fi

echo "Selection: C=Clean All, K=Keep (Incremental), D=Keep Base ISO [C]"
read -p "Selection: " -n 1 -r BUILD_MODE
echo ""
case ${BUILD_MODE,,} in
    k ) echo "➡️  Incremental build..."; ;;
    d ) sudo umount -l "$SQUASHFS_ROOT" "$ISO_ROOT" 2>/dev/null || true
        sudo rm -rf "$WORK_DIR" "$ISO_ROOT";;
    * ) sudo umount -l "$SQUASHFS_ROOT" "$ISO_ROOT" 2>/dev/null || true
        sudo rm -rf "$BUILD_DIR" "$GENERATED" "$WORK_DIR" "$ISO_ROOT";;
esac
mkdir -p "$OUTPUT_DIR" "$ISO_DIR" "$WORK_DIR" "$ISO_ROOT"

# ═══════════════════════════════════════════════════════════════════
# [Phase 1] Base ISO Handling (Extraction)
# ═══════════════════════════════════════════════════════════════════
ISO_FILE="$ISO_DIR/debian-live-mate-amd64.iso"
ISO_URL="https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-13.2.0-amd64-mate.iso"

if [ ! -f "$ISO_FILE" ]; then
    echo "⬇️ Downloading Debian Base (One-time)..."
    curl -L "$ISO_URL" -o "$ISO_FILE"
fi

echo "[Phase 1.1] Extracting ISO Structure..."
sudo bsdtar -C "$ISO_ROOT" -xf "$ISO_FILE"

echo "[Phase 1.2] Extracting Filesystem (SquashFS)..."
sudo rm -rf "$SQUASHFS_ROOT" && mkdir -p "$SQUASHFS_ROOT"
sudo unsquashfs -f -d "$SQUASHFS_ROOT" "$ISO_ROOT/live/filesystem.squashfs"
sudo chown -R "$USER":"$USER" "$SQUASHFS_ROOT" # Allow edits

# ═══════════════════════════════════════════════════════════════════
# [Phase 2] Chroot Configuration & Packages
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 2] Configuring Repositories & Installing Developer Tools..."
mkdir -p "$SQUASHFS_ROOT/etc/apt"
cat > "$SQUASHFS_ROOT/etc/apt/sources.list" << 'EOF'
deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmware
deb http://deb.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
EOF

sudo chroot "$SQUASHFS_ROOT" bash -c "
    export DEBIAN_FRONTEND=noninteractive
    apt-get update -qq
    # Install Multimedia + Pro Developer Fonts
    apt-get install -y -qq vlc geeqie ffmpeg mate-utils fonts-jetbrains-mono p7zip-full
    apt-get clean
"

# ═══════════════════════════════════════════════════════════════════
# [Phase 3] Assets Deployment
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 3] Deploying FurryOS Assets..."
FURRYOS_SHARE="$SQUASHFS_ROOT/usr/share/furryos"
mkdir -p "$FURRYOS_SHARE"
[ -d "$PROJECT_ROOT/payload/assets" ] && cp -rv "$PROJECT_ROOT/payload/assets"/* "$FURRYOS_SHARE/"

# ═══════════════════════════════════════════════════════════════════
# [Phase 4] Live Experience Script Generation
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 4] Generating Live-Boot Setup (The Magic)..."
cat > "$SQUASHFS_ROOT/usr/local/bin/furryos-live-setup" << 'EOF'
#!/bin/bash
ASSET_SRC="/usr/share/furryos"
FURRY_HOME="$HOME/FurryOS"
PR="/org/mate/terminal/profiles/default"

# 1. Folder Setup
mkdir -p "$FURRY_HOME"
rsync -a "$ASSET_SRC/" "$FURRY_HOME/"
chmod -R u+rw "$FURRY_HOME"
xdg-user-dirs-update

# 2. UI Configuration
gsettings set org.mate.desktop.background picture-filename "$FURRY_HOME/wallpapers/default.jpg"
gsettings set org.mate.desktop.background picture-options 'zoom'

# 🐾 TERMINAL: Ember-Night Developer Look (JetBrains Mono Medium 13)
dconf write $PR/use-theme-colors false
dconf write $PR/background-color "'#1A1414'"
dconf write $PR/foreground-color "'#FEE2E2'"
dconf write $PR/bold-color "'#FB8500'"
dconf write $PR/use-system-font false
dconf write $PR/font "'JetBrains Mono Medium 13'"
dconf write $PR/visible-name "'FurryOS Ember-Night'"
dconf write $PR/palette "'#1A1414:#FF4D4D:#A3CB38:#FB8500:#12CBC4:#FDA7DF:#1289A7:#D1D8E0:#57606F:#FF6B6B:#C4E538:#FFBE76:#219EBC:#ED4C67:#81ECEC:#FFFFFF'"

# 3. Multimedia Setup
(sleep 3 && paplay "$FURRY_HOME/sounds/startup.ogg") &
EOF
chmod +x "$SQUASHFS_ROOT/usr/local/bin/furryos-live-setup"

# ═══════════════════════════════════════════════════════════════════
# [Phase 5] Autostart Registration
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 5] Registering Autostart Entries..."
mkdir -p "$SQUASHFS_ROOT/etc/skel/.config/autostart"
cat > "$SQUASHFS_ROOT/etc/skel/.config/autostart/furryos.desktop" << 'EOF'
[Desktop Entry]
Type=Application
Name=FurryOS Setup
Exec=/usr/local/bin/furryos-live-setup
Terminal=false
X-MATE-Autostart-enabled=true
EOF

# ═══════════════════════════════════════════════════════════════════
# [Phase 6] Boot Splash (GRUB)
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 6] Configuring GRUB Boot Splash..."
if [ -f "$FURRYOS_SHARE/splash/splash.png" ]; then
    mkdir -p "$SQUASHFS_ROOT/boot/grub"
    cp "$FURRYOS_SHARE/splash/splash.png" "$SQUASHFS_ROOT/boot/grub/splash.png"
fi

# ═══════════════════════════════════════════════════════════════════
# [Phase 7] Mode Switcher System
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 7] Installing Mode Switching logic..."
# (Code for furryos-mode-switch goes here if you use it)

# ═══════════════════════════════════════════════════════════════════
# [Phase 8] Final Desktop Customizations
# ═══════════════════════════════════════════════════════════════════
echo "[Phase 8] Finalizing Chroot tweaks..."
# Links to ~/FurryOS folder on desktop
mkdir -p "$SQUASHFS_ROOT/etc/skel/Desktop"

# ═══════════════════════════════════════════════════════════════════
# [Phase 8.5] The Test Drive (FAST)
# ═══════════════════════════════════════════════════════════════════
echo ""
echo "🚗 Workspace Ready! Launch QEMU Test Drive? [y/N]"
read -r TEST_DRIVE
if [[ $TEST_DRIVE =~ ^[Yy]$ ]]; then
    sudo qemu-system-x86_64 \
        -kernel "$ISO_ROOT/live/vmlinuz" \
        -initrd "$ISO_ROOT/live/initrd.img" \
        -append "boot=live components quiet nosplash toram=filesystem.squashfs" \
        -drive file=fat:rw:"$SQUASHFS_ROOT",format=raw,if=virtio \
        -m 2048M -smp 2 -enable-kvm -vga virtio -display gtk,gl=on -usb -device usb-tablet
fi

# ═══════════════════════════════════════════════════════════════════
# [Phase 9] Packing SquashFS (High Compression)
# ═══════════════════════════════════════════════════════════════════
echo ""
read -p "🚀 Next: [P]ack final ISO or [E]xit? [P]: " -n 1 -r NEXT_STEP
echo ""

if [[ ${NEXT_STEP,,} != "e" ]]; then
    echo "[Phase 9] Repacking SquashFS... (Grab a coffee ☕)"
    sudo rm -f "$ISO_ROOT/live/filesystem.squashfs"
    sudo mksquashfs "$SQUASHFS_ROOT" "$ISO_ROOT/live/filesystem.squashfs" \
        -comp xz -b 1048576 -mem "${SQUASH_MEM}G" -noappend >/dev/null

    # ═══════════════════════════════════════════════════════════════════
    # [Phase 10] Final ISO Creation
    # ═══════════════════════════════════════════════════════════════════
    echo "[Phase 10] Finalizing bootable ISO..."
    OUTPUT_ISO="$OUTPUT_DIR/furryos-gen2.1-v2.iso"
    sudo xorriso -as mkisofs -iso-level 3 -full-iso9660-filenames \
        -volid "FurryOS" -eltorito-boot isolinux/isolinux.bin \
        -eltorito-catalog isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
        -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -output "$OUTPUT_ISO" "$ISO_ROOT" 2>/dev/null

    echo "✅ SUCCESS! Your ISO is at: $OUTPUT_ISO"
fi

DURATION=$(($(date +%s) - BUILD_START_TIME))
echo "⏱️ Total build time: $((DURATION / 60))m $((DURATION % 60))s"
